package com.dz.scrm.app.receiver

import android.content.Context
import android.content.Intent
import android.net.Uri
import cn.jpush.android.api.CmdMessage
import cn.jpush.android.api.CustomMessage
import cn.jpush.android.api.JPushMessage
import cn.jpush.android.api.NotificationMessage
import cn.jpush.android.service.JPushMessageReceiver
import com.dz.scrm.mvp.model.entity.EventMessage
import com.dz.scrm.mvp.ui.HomeActivity
import com.dz.scrm.utils.*
import com.dz.scrm.utils.SharedPreferencesUtil.RegistrationID
import com.miui.enterprise.sdk.PhoneManager
import me.jessyan.art.integration.AppManager
import me.jessyan.art.integration.EventBusManager
import me.jessyan.art.utils.ArtUtils
import me.jessyan.art.utils.ArtUtils.startActivity
import java.io.Serializable

class PushMsgBean(val customerName: String? = "", val customerPhone: String = "") : Serializable

const val CODE_PUSH_DATA = 1

/**
 * 作者：fanda
 * 描述：自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调
 *
 * 注意：华为的厂商通道，经过实测，不支持极光的回调方法，即不会回调这里面的方法(坑)，需要直接在对应打开的界面做数据处理
 */
class PushMessageReceiver : JPushMessageReceiver() {
    override fun onMessage(context: Context, customMessage: CustomMessage) {
        // 自定义消息，不会出现在通知栏，消息由APP端自己处理，如果用户离线状态，可以通过后端控制离线保留时间，或APP对离线消息的过期做判断处理
        if (!isAlreadyLogin() || customMessage.extra.isNullOrEmpty()) {
            return
        } else {
            SystemHelper.setTopApp(context)
            val msgBean = JsonHelper.parserJson2Object(customMessage.extra, PushMsgBean::class.java)
            EventBusManager.getInstance().post(EventMessage(CODE_PUSH_DATA, msgBean))
        }
        LoggerUtils.d("[onMessage] $customMessage")
    }

    override fun onNotifyMessageOpened(context: Context, notificationMessage: NotificationMessage) {
        // 不推荐使用，其他部分厂商有不触发的情况，所以要综合考虑，
        // 注意，如果用极光通道推送进来的，这里可以触发，通过厂商推送（有些）则不会走
        LoggerUtils.d("[onNotifyMessageOpened] $notificationMessage")

        // 如果有额外的约定字段，则做界面的分发处理，否则不做任何处理，直接打开首页就行
//        val loginState = DataBaseUtil.getInstance().getString(DataKeyConfig.LoginState)
//        // 没有登录，直接关闭
//        if (TextUtils.isEmpty(loginState) || "0" == loginState) {
//            return
//        }
//        if (notificationMessage.notificationExtras.isNotEmpty()) {
//            try {
//                val msgBean = JsonHelper.parserJson2Object(notificationMessage.notificationExtras, PushMsgBean::class.java)
//                // 打开推送点击分发界面，这里还需要判断是否已经登录，不能直接跳过登录
//                if (msgBean != null && msgBean.needOpenActivity!!) {
//                    context.startActivity(Intent(context, PushClickActivity::class.java).apply {
//                        putExtras(Bundle().apply {
//                            putString(JPushInterface.EXTRA_NOTIFICATION_TITLE, notificationMessage.notificationTitle)
//                            putString(JPushInterface.EXTRA_ALERT, notificationMessage.notificationContent)
//                            putString(JPushInterface.EXTRA_MSG_ID, notificationMessage.msgId)
//                            putSerializable(KEY_PUSH_BEAN, msgBean)
//                            putInt(KEY_PUSH_SDK_TYPE, notificationMessage.platform)
//                        })
//                        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
//                    })
//                }
//            } catch (e: JSONException) {
//            }
//        }
    }

    override fun onNotifyMessageArrived(context: Context, notificationMessage: NotificationMessage) {
        LoggerUtils.d("[onNotifyMessageArrived] $notificationMessage")
    }

    override fun onRegister(context: Context, registrationId: String) {
        LoggerUtils.d("[onRegister] $registrationId")
        SharedPreferencesUtil.saveInfo(RegistrationID,registrationId)
    }

    override fun onConnected(context: Context, isConnected: Boolean) {
        LoggerUtils.d("[onConnected] $isConnected")
    }

    override fun onCommandResult(context: Context, cmdMessage: CmdMessage) {
        LoggerUtils.d("[onCommandResult] $cmdMessage")
    }

    override fun onMultiActionClicked(context: Context, intent: Intent) {
        LoggerUtils.d("[onMultiActionClicked] $intent")
    }

    override fun onTagOperatorResult(context: Context, jPushMessage: JPushMessage) {
        super.onTagOperatorResult(context, jPushMessage)
    }

    override fun onCheckTagOperatorResult(context: Context, jPushMessage: JPushMessage) {
        super.onCheckTagOperatorResult(context, jPushMessage)
    }

    override fun onAliasOperatorResult(context: Context, jPushMessage: JPushMessage) {
        super.onAliasOperatorResult(context, jPushMessage)
    }

    override fun onMobileNumberOperatorResult(context: Context, jPushMessage: JPushMessage) {
        super.onMobileNumberOperatorResult(context, jPushMessage)
    }

    override fun onNotificationSettingsCheck(context: Context, isOn: Boolean, source: Int) {
        // source: 0为sdk启动，1为检测到通知开关状态变更，在少部分机型上可能存在兼容问题(判断不准确)
        // 当通知开关状态变更时，回到APP界面，会回调该通知
        LoggerUtils.d("[onNotificationSettingsCheck] $isOn")
    }

}